package com.handl.springcloud.amqp.consumer;

import com.handl.springcloud.amqp.dto.User;
import org.springframework.cloud.stream.annotation.EnableBinding;
import org.springframework.cloud.stream.annotation.StreamListener;
import org.springframework.messaging.handler.annotation.SendTo;

/**
 * Created by handl on 2017/11/12.
 *
 * 监听@INPUT("input")
 * 反馈@SendTo:反馈消息给某个通道
 *      这里反馈的是@OUTPUT("output")通道
 *
 * 与SendToSender的通道正好相反
 *
 *
 */

/**
 * @EnableBinding:该注解指定了一个或多个定义了@Input或@Output注解的接口
 *      以此实现对消息通道（Channel）的绑定，
 * 下面列子实现了对SendToBinder接口的绑定
 */
@EnableBinding(value = {SendToBinder.class}) // 绑定通道
public class SendToReceiver {
    /**
     * @StreamListener：用来监听指定通道名称的输入通道
     *      这里用来指定了SendToBinder接口中被@Input绑定的名称为consumer_get的通道
     *
     * @SendTo：消息反馈，处理完消息后，指定一个通道来反馈消息
     *
     * @param user
     * @return
     */
    @StreamListener(SendToBinder.INPUT) // 监听input通道
    @SendTo(SendToBinder.OUTPUT) // 返回处理结果到output通道
    public String receiveFromInput(User user) {
        System.out.println("Receiver------User:"+user+
                "-------name:"+user.getName()+"---------age:"+user.getAge());
        return "-------已经收到消息";
    }
}
